Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
420 / 420
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
PptTheme
100.00% covered (success)
100.00%
420 / 420
100.00% covered (success)
100.00%
2 / 2
8
100.00% covered (success)
100.00%
1 / 1
 render
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 writeTheme
100.00% covered (success)
100.00%
417 / 417
100.00% covered (success)
100.00%
1 / 1
6
1<?php
2
3/**
4 * This file is part of PHPPresentation - A pure PHP library for reading and writing
5 * presentations documents.
6 *
7 * PHPPresentation is free software distributed under the terms of the GNU Lesser
8 * General Public License version 3 as published by the Free Software Foundation.
9 *
10 * For the full copyright and license information, please read the LICENSE
11 * file that was distributed with this source code. For the full list of
12 * contributors, visit https://github.com/PHPOffice/PHPPresentation/contributors.
13 *
14 * @see        https://github.com/PHPOffice/PHPPresentation
15 *
16 * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
17 */
18
19declare(strict_types=1);
20
21namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
22
23use PhpOffice\Common\Adapter\Zip\ZipInterface;
24use PhpOffice\Common\XMLWriter;
25use PhpOffice\PhpPresentation\Slide;
26
27class PptTheme extends AbstractDecoratorWriter
28{
29    public function render(): ZipInterface
30    {
31        foreach ($this->oPresentation->getAllMasterSlides() as $oMasterSlide) {
32            $this->getZip()->addFromString('ppt/theme/theme' . $oMasterSlide->getRelsIndex() . '.xml', $this->writeTheme($oMasterSlide));
33        }
34
35        return $this->getZip();
36    }
37
38    /**
39     * Write theme to XML format.
40     *
41     * @return string XML Output
42     */
43    protected function writeTheme(Slide\SlideMaster $oMasterSlide): string
44    {
45        $arrayFont = [
46            'Jpan' => 'MS Pゴシック',
47            'Hang' => '맑은 고딕',
48            'Hans' => '宋体',
49            'Hant' => '新細明體',
50            'Arab' => 'Times New Roman',
51            'Hebr' => 'Times New Roman',
52            'Thai' => 'Angsana New',
53            'Ethi' => 'Nyala',
54            'Beng' => 'Vrinda',
55            'Gujr' => 'Shruti',
56            'Khmr' => 'MoolBoran',
57            'Knda' => 'Tunga',
58            'Guru' => 'Raavi',
59            'Cans' => 'Euphemia',
60            'Cher' => 'Plantagenet Cherokee',
61            'Yiii' => 'Microsoft Yi Baiti',
62            'Tibt' => 'Microsoft Himalaya',
63            'Thaa' => 'MV Boli',
64            'Deva' => 'Mangal',
65            'Telu' => 'Gautami',
66            'Taml' => 'Latha',
67            'Syrc' => 'Estrangelo Edessa',
68            'Orya' => 'Kalinga',
69            'Mlym' => 'Kartika',
70            'Laoo' => 'DokChampa',
71            'Sinh' => 'Iskoola Pota',
72            'Mong' => 'Mongolian Baiti',
73            'Viet' => 'Times New Roman',
74            'Uigh' => 'Microsoft Uighur',
75        ];
76
77        // Create XML writer
78        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
79
80        $name = 'Theme' . mt_rand(1, 100);
81
82        // XML header
83        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
84
85        // a:theme
86        $objWriter->startElement('a:theme');
87        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
88        $objWriter->writeAttribute('name', $name);
89
90        // a:theme/a:themeElements
91        $objWriter->startElement('a:themeElements');
92
93        // a:theme/a:themeElements/a:clrScheme
94        $objWriter->startElement('a:clrScheme');
95        $objWriter->writeAttribute('name', $name);
96
97        foreach ($oMasterSlide->getAllSchemeColors() as $oSchemeColor) {
98            // a:theme/a:themeElements/a:clrScheme/a:*
99            $objWriter->startElement('a:' . $oSchemeColor->getValue());
100
101            if (in_array($oSchemeColor->getValue(), [
102                'dk1', 'lt1',
103            ])) {
104                $objWriter->startElement('a:sysClr');
105                $objWriter->writeAttribute('val', ('dk1' == $oSchemeColor->getValue() ? 'windowText' : 'window'));
106                $objWriter->writeAttribute('lastClr', $oSchemeColor->getRGB());
107                $objWriter->endElement();
108            } else {
109                $objWriter->startElement('a:srgbClr');
110                $objWriter->writeAttribute('val', $oSchemeColor->getRGB());
111                $objWriter->endElement();
112            }
113
114            // a:theme/a:themeElements/a:clrScheme/a:*/
115            $objWriter->endElement();
116        }
117
118        // a:theme/a:themeElements/a:clrScheme/
119        $objWriter->endElement();
120
121        // a:theme/a:themeElements/a:fontScheme
122        $objWriter->startElement('a:fontScheme');
123        $objWriter->writeAttribute('name', $name);
124
125        // a:theme/a:themeElements/a:fontScheme/a:majorFont
126        $objWriter->startElement('a:majorFont');
127
128        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin
129        $objWriter->startElement('a:latin');
130        $objWriter->writeAttribute('typeface', 'Calibri');
131        $objWriter->endElement();
132
133        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:ea
134        $objWriter->startElement('a:ea');
135        $objWriter->writeAttribute('typeface', '');
136        $objWriter->endElement();
137
138        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:cs
139        $objWriter->startElement('a:cs');
140        $objWriter->writeAttribute('typeface', '');
141        $objWriter->endElement();
142
143        foreach ($arrayFont as $script => $typeface) {
144            // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:font
145            $objWriter->startElement('a:font');
146            $objWriter->writeAttribute('script', $script);
147            $objWriter->writeAttribute('typeface', $typeface);
148            $objWriter->endElement();
149        }
150
151        // a:theme/a:themeElements/a:fontScheme/a:majorFont/
152        $objWriter->endElement();
153
154        // a:theme/a:themeElements/a:fontScheme/a:minorFont
155        $objWriter->startElement('a:minorFont');
156
157        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin
158        $objWriter->startElement('a:latin');
159        $objWriter->writeAttribute('typeface', 'Calibri');
160        $objWriter->endElement();
161
162        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:ea
163        $objWriter->startElement('a:ea');
164        $objWriter->writeAttribute('typeface', '');
165        $objWriter->endElement();
166
167        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:cs
168        $objWriter->startElement('a:cs');
169        $objWriter->writeAttribute('typeface', '');
170        $objWriter->endElement();
171
172        foreach ($arrayFont as $script => $typeface) {
173            // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:font
174            $objWriter->startElement('a:font');
175            $objWriter->writeAttribute('script', $script);
176            $objWriter->writeAttribute('typeface', $typeface);
177            $objWriter->endElement();
178        }
179
180        // a:theme/a:themeElements/a:fontScheme/a:minorFont/
181        $objWriter->endElement();
182
183        // a:theme/a:themeElements/a:fontScheme/
184        $objWriter->endElement();
185
186        // a:theme/a:themeElements/a:fmtScheme
187        $objWriter->startElement('a:fmtScheme');
188        $objWriter->writeAttribute('name', $name);
189
190        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst
191        $objWriter->startElement('a:fillStyleLst');
192
193        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill
194        $objWriter->startElement('a:solidFill');
195
196        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/a:schemeClr
197        $objWriter->startElement('a:schemeClr');
198        $objWriter->writeAttribute('val', 'phClr');
199
200        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/a:schemeClr/
201        $objWriter->endElement();
202
203        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/
204        $objWriter->endElement();
205
206        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill
207        $objWriter->startElement('a:gradFill');
208        $objWriter->writeAttribute('rotWithShape', 1);
209
210        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst
211        $objWriter->startElement('a:gsLst');
212
213        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
214        $objWriter->startElement('a:gs');
215        $objWriter->writeAttribute('pos', '0');
216
217        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
218        $objWriter->startElement('a:schemeClr');
219        $objWriter->writeAttribute('val', 'phClr');
220
221        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
222        $objWriter->startElement('a:tint');
223        $objWriter->writeAttribute('val', '50000');
224        $objWriter->endElement();
225
226        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
227        $objWriter->startElement('a:satMod');
228        $objWriter->writeAttribute('val', '300000');
229        $objWriter->endElement();
230
231        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
232        $objWriter->endElement();
233
234        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
235        $objWriter->endElement();
236
237        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
238        $objWriter->startElement('a:gs');
239        $objWriter->writeAttribute('pos', '35000');
240
241        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
242        $objWriter->startElement('a:schemeClr');
243        $objWriter->writeAttribute('val', 'phClr');
244
245        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
246        $objWriter->startElement('a:tint');
247        $objWriter->writeAttribute('val', '37000');
248        $objWriter->endElement();
249
250        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
251        $objWriter->startElement('a:satMod');
252        $objWriter->writeAttribute('val', '300000');
253        $objWriter->endElement();
254
255        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
256        $objWriter->endElement();
257
258        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
259        $objWriter->endElement();
260
261        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
262        $objWriter->startElement('a:gs');
263        $objWriter->writeAttribute('pos', '100000');
264
265        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
266        $objWriter->startElement('a:schemeClr');
267        $objWriter->writeAttribute('val', 'phClr');
268
269        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
270        $objWriter->startElement('a:tint');
271        $objWriter->writeAttribute('val', '15000');
272        $objWriter->endElement();
273
274        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
275        $objWriter->startElement('a:satMod');
276        $objWriter->writeAttribute('val', '350000');
277        $objWriter->endElement();
278
279        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
280        $objWriter->endElement();
281
282        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
283        $objWriter->endElement();
284
285        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/
286        $objWriter->endElement();
287
288        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:lin
289        $objWriter->startElement('a:lin');
290        $objWriter->writeAttribute('ang', 16200000);
291        $objWriter->writeAttribute('scaled', 1);
292        $objWriter->endElement();
293
294        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/
295        $objWriter->endElement();
296
297        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill
298        $objWriter->startElement('a:gradFill');
299        $objWriter->writeAttribute('rotWithShape', 1);
300
301        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst
302        $objWriter->startElement('a:gsLst');
303
304        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
305        $objWriter->startElement('a:gs');
306        $objWriter->writeAttribute('pos', '0');
307
308        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
309        $objWriter->startElement('a:schemeClr');
310        $objWriter->writeAttribute('val', 'phClr');
311
312        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
313        $objWriter->startElement('a:shade');
314        $objWriter->writeAttribute('val', '51000');
315        $objWriter->endElement();
316
317        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
318        $objWriter->startElement('a:satMod');
319        $objWriter->writeAttribute('val', '130000');
320        $objWriter->endElement();
321
322        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
323        $objWriter->endElement();
324
325        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
326        $objWriter->endElement();
327
328        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
329        $objWriter->startElement('a:gs');
330        $objWriter->writeAttribute('pos', '80000');
331
332        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
333        $objWriter->startElement('a:schemeClr');
334        $objWriter->writeAttribute('val', 'phClr');
335
336        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
337        $objWriter->startElement('a:shade');
338        $objWriter->writeAttribute('val', '93000');
339        $objWriter->endElement();
340
341        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
342        $objWriter->startElement('a:satMod');
343        $objWriter->writeAttribute('val', '130000');
344        $objWriter->endElement();
345
346        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
347        $objWriter->endElement();
348
349        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
350        $objWriter->endElement();
351
352        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
353        $objWriter->startElement('a:gs');
354        $objWriter->writeAttribute('pos', '100000');
355
356        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
357        $objWriter->startElement('a:schemeClr');
358        $objWriter->writeAttribute('val', 'phClr');
359
360        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
361        $objWriter->startElement('a:shade');
362        $objWriter->writeAttribute('val', '94000');
363        $objWriter->endElement();
364
365        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
366        $objWriter->startElement('a:satMod');
367        $objWriter->writeAttribute('val', '135000');
368        $objWriter->endElement();
369
370        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
371        $objWriter->endElement();
372
373        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
374        $objWriter->endElement();
375
376        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/
377        $objWriter->endElement();
378
379        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:lin
380        $objWriter->startElement('a:lin');
381        $objWriter->writeAttribute('ang', 16200000);
382        $objWriter->writeAttribute('scaled', 0);
383        $objWriter->endElement();
384
385        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/
386        $objWriter->endElement();
387
388        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/
389        $objWriter->endElement();
390
391        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst
392        $objWriter->startElement('a:lnStyleLst');
393
394        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
395        $objWriter->startElement('a:ln');
396        $objWriter->writeAttribute('w', 9525);
397        $objWriter->writeAttribute('cap', 'flat');
398        $objWriter->writeAttribute('cmpd', 'sng');
399        $objWriter->writeAttribute('algn', 'ctr');
400
401        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
402        $objWriter->startElement('a:solidFill');
403
404        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
405        $objWriter->startElement('a:schemeClr');
406        $objWriter->writeAttribute('val', 'phClr');
407
408        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
409        $objWriter->startElement('a:shade');
410        $objWriter->writeAttribute('val', '95000');
411        $objWriter->endElement();
412
413        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
414        $objWriter->startElement('a:satMod');
415        $objWriter->writeAttribute('val', '105000');
416        $objWriter->endElement();
417
418        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
419        $objWriter->endElement();
420
421        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
422        $objWriter->endElement();
423
424        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
425        $objWriter->startElement('a:prstDash');
426        $objWriter->writeAttribute('val', 'solid');
427        $objWriter->endElement();
428
429        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
430        $objWriter->endElement();
431
432        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
433        $objWriter->startElement('a:ln');
434        $objWriter->writeAttribute('w', 25400);
435        $objWriter->writeAttribute('cap', 'flat');
436        $objWriter->writeAttribute('cmpd', 'sng');
437        $objWriter->writeAttribute('algn', 'ctr');
438
439        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
440        $objWriter->startElement('a:solidFill');
441
442        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
443        $objWriter->startElement('a:schemeClr');
444        $objWriter->writeAttribute('val', 'phClr');
445
446        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
447        $objWriter->endElement();
448
449        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
450        $objWriter->endElement();
451
452        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
453        $objWriter->startElement('a:prstDash');
454        $objWriter->writeAttribute('val', 'solid');
455        $objWriter->endElement();
456
457        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
458        $objWriter->endElement();
459
460        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
461        $objWriter->startElement('a:ln');
462        $objWriter->writeAttribute('w', 38100);
463        $objWriter->writeAttribute('cap', 'flat');
464        $objWriter->writeAttribute('cmpd', 'sng');
465        $objWriter->writeAttribute('algn', 'ctr');
466
467        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
468        $objWriter->startElement('a:solidFill');
469
470        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
471        $objWriter->startElement('a:schemeClr');
472        $objWriter->writeAttribute('val', 'phClr');
473
474        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
475        $objWriter->endElement();
476
477        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
478        $objWriter->endElement();
479
480        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
481        $objWriter->startElement('a:prstDash');
482        $objWriter->writeAttribute('val', 'solid');
483        $objWriter->endElement();
484
485        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
486        $objWriter->endElement();
487
488        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/
489        $objWriter->endElement();
490
491        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst
492        $objWriter->startElement('a:effectStyleLst');
493
494        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
495        $objWriter->startElement('a:effectStyle');
496
497        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
498        $objWriter->startElement('a:effectLst');
499
500        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
501        $objWriter->startElement('a:outerShdw');
502        $objWriter->writeAttribute('blurRad', 40000);
503        $objWriter->writeAttribute('dir', 5400000);
504        $objWriter->writeAttribute('dist', 20000);
505        $objWriter->writeAttribute('rotWithShape', 0);
506
507        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
508        $objWriter->startElement('a:srgbClr');
509        $objWriter->writeAttribute('val', '000000');
510
511        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
512        $objWriter->startElement('a:alpha');
513        $objWriter->writeAttribute('val', '38000');
514
515        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
516        $objWriter->endElement();
517
518        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
519        $objWriter->endElement();
520
521        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
522        $objWriter->endElement();
523
524        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
525        $objWriter->endElement();
526
527        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
528        $objWriter->endElement();
529
530        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
531        $objWriter->startElement('a:effectStyle');
532
533        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
534        $objWriter->startElement('a:effectLst');
535
536        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
537        $objWriter->startElement('a:outerShdw');
538        $objWriter->writeAttribute('blurRad', 40000);
539        $objWriter->writeAttribute('dir', 5400000);
540        $objWriter->writeAttribute('dist', 23000);
541        $objWriter->writeAttribute('rotWithShape', 0);
542
543        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
544        $objWriter->startElement('a:srgbClr');
545        $objWriter->writeAttribute('val', '000000');
546
547        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
548        $objWriter->startElement('a:alpha');
549        $objWriter->writeAttribute('val', '35');
550
551        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
552        $objWriter->endElement();
553
554        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
555        $objWriter->endElement();
556
557        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
558        $objWriter->endElement();
559
560        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
561        $objWriter->endElement();
562
563        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
564        $objWriter->endElement();
565
566        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
567        $objWriter->startElement('a:effectStyle');
568
569        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
570        $objWriter->startElement('a:effectLst');
571
572        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
573        $objWriter->startElement('a:outerShdw');
574        $objWriter->writeAttribute('blurRad', 40000);
575        $objWriter->writeAttribute('dir', 5400000);
576        $objWriter->writeAttribute('dist', 23000);
577        $objWriter->writeAttribute('rotWithShape', 0);
578
579        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
580        $objWriter->startElement('a:srgbClr');
581        $objWriter->writeAttribute('val', '000000');
582
583        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
584        $objWriter->startElement('a:alpha');
585        $objWriter->writeAttribute('val', '35000');
586
587        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
588        $objWriter->endElement();
589
590        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
591        $objWriter->endElement();
592
593        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
594        $objWriter->endElement();
595
596        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
597        $objWriter->endElement();
598
599        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d
600        $objWriter->startElement('a:scene3d');
601
602        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera
603        $objWriter->startElement('a:camera');
604        $objWriter->writeAttribute('prst', 'orthographicFront');
605
606        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera/a:rot
607        $objWriter->startElement('a:rot');
608        $objWriter->writeAttribute('lat', 0);
609        $objWriter->writeAttribute('lon', 0);
610        $objWriter->writeAttribute('rev', 0);
611        $objWriter->endElement();
612
613        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera/
614        $objWriter->endElement();
615
616        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig
617        $objWriter->startElement('a:lightRig');
618        $objWriter->writeAttribute('dir', 't');
619        $objWriter->writeAttribute('rig', 'threePt');
620
621        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig/a:rot
622        $objWriter->startElement('a:rot');
623        $objWriter->writeAttribute('lat', 0);
624        $objWriter->writeAttribute('lon', 0);
625        $objWriter->writeAttribute('rev', 1200000);
626        $objWriter->endElement();
627
628        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig/
629        $objWriter->endElement();
630
631        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/
632        $objWriter->endElement();
633
634        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d
635        $objWriter->startElement('a:sp3d');
636
637        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d/a:bevelT
638        $objWriter->startElement('a:bevelT');
639        $objWriter->writeAttribute('h', 25400);
640        $objWriter->writeAttribute('w', 63500);
641        $objWriter->endElement();
642
643        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d/
644        $objWriter->endElement();
645
646        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
647        $objWriter->endElement();
648
649        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/
650        $objWriter->endElement();
651
652        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst
653        $objWriter->startElement('a:bgFillStyleLst');
654
655        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill
656        $objWriter->startElement('a:solidFill');
657
658        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/a:schemeClr
659        $objWriter->startElement('a:schemeClr');
660        $objWriter->writeAttribute('val', 'phClr');
661
662        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/a:schemeClr/
663        $objWriter->endElement();
664
665        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/
666        $objWriter->endElement();
667
668        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill
669        $objWriter->startElement('a:gradFill');
670        $objWriter->writeAttribute('rotWithShape', 1);
671
672        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst
673        $objWriter->startElement('a:gsLst');
674
675        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
676        $objWriter->startElement('a:gs');
677        $objWriter->writeAttribute('pos', '0');
678
679        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
680        $objWriter->startElement('a:schemeClr');
681        $objWriter->writeAttribute('val', 'phClr');
682
683        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
684        $objWriter->startElement('a:tint');
685        $objWriter->writeAttribute('val', '40000');
686        $objWriter->endElement();
687
688        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
689        $objWriter->startElement('a:satMod');
690        $objWriter->writeAttribute('val', '350000');
691        $objWriter->endElement();
692
693        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
694        $objWriter->endElement();
695
696        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
697        $objWriter->endElement();
698
699        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
700        $objWriter->startElement('a:gs');
701        $objWriter->writeAttribute('pos', '40000');
702
703        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
704        $objWriter->startElement('a:schemeClr');
705        $objWriter->writeAttribute('val', 'phClr');
706
707        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
708        $objWriter->startElement('a:tint');
709        $objWriter->writeAttribute('val', '45000');
710        $objWriter->endElement();
711
712        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
713        $objWriter->startElement('a:shade');
714        $objWriter->writeAttribute('val', '99000');
715        $objWriter->endElement();
716
717        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
718        $objWriter->startElement('a:satMod');
719        $objWriter->writeAttribute('val', '350000');
720        $objWriter->endElement();
721
722        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
723        $objWriter->endElement();
724
725        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
726        $objWriter->endElement();
727
728        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
729        $objWriter->startElement('a:gs');
730        $objWriter->writeAttribute('pos', '100000');
731
732        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
733        $objWriter->startElement('a:schemeClr');
734        $objWriter->writeAttribute('val', 'phClr');
735
736        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
737        $objWriter->startElement('a:shade');
738        $objWriter->writeAttribute('val', '20000');
739        $objWriter->endElement();
740
741        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
742        $objWriter->startElement('a:satMod');
743        $objWriter->writeAttribute('val', '255000');
744        $objWriter->endElement();
745
746        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
747        $objWriter->endElement();
748
749        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
750        $objWriter->endElement();
751
752        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/
753        $objWriter->endElement();
754
755        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path
756        $objWriter->startElement('a:path');
757        $objWriter->writeAttribute('path', 'circle');
758
759        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/a:fillToRect
760        $objWriter->startElement('a:fillToRect');
761        $objWriter->writeAttribute('b', '180000');
762        $objWriter->writeAttribute('l', '50000');
763        $objWriter->writeAttribute('r', '50000');
764        $objWriter->writeAttribute('t', '-80000');
765        $objWriter->endElement();
766
767        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/
768        $objWriter->endElement();
769
770        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/
771        $objWriter->endElement();
772
773        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill
774        $objWriter->startElement('a:gradFill');
775        $objWriter->writeAttribute('rotWithShape', 1);
776
777        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst
778        $objWriter->startElement('a:gsLst');
779
780        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
781        $objWriter->startElement('a:gs');
782        $objWriter->writeAttribute('pos', '0');
783
784        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
785        $objWriter->startElement('a:schemeClr');
786        $objWriter->writeAttribute('val', 'phClr');
787
788        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
789        $objWriter->startElement('a:tint');
790        $objWriter->writeAttribute('val', '80000');
791        $objWriter->endElement();
792
793        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
794        $objWriter->startElement('a:satMod');
795        $objWriter->writeAttribute('val', '300000');
796        $objWriter->endElement();
797
798        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
799        $objWriter->endElement();
800
801        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
802        $objWriter->endElement();
803
804        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
805        $objWriter->startElement('a:gs');
806        $objWriter->writeAttribute('pos', '100000');
807
808        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
809        $objWriter->startElement('a:schemeClr');
810        $objWriter->writeAttribute('val', 'phClr');
811
812        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
813        $objWriter->startElement('a:shade');
814        $objWriter->writeAttribute('val', '30000');
815        $objWriter->endElement();
816
817        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
818        $objWriter->startElement('a:satMod');
819        $objWriter->writeAttribute('val', '200000');
820        $objWriter->endElement();
821
822        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
823        $objWriter->endElement();
824
825        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
826        $objWriter->endElement();
827
828        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/
829        $objWriter->endElement();
830
831        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path
832        $objWriter->startElement('a:path');
833        $objWriter->writeAttribute('path', 'circle');
834
835        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/a:fillToRect
836        $objWriter->startElement('a:fillToRect');
837        $objWriter->writeAttribute('b', '50000');
838        $objWriter->writeAttribute('l', '50000');
839        $objWriter->writeAttribute('r', '50000');
840        $objWriter->writeAttribute('t', '50000');
841        $objWriter->endElement();
842
843        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/
844        $objWriter->endElement();
845
846        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/
847        $objWriter->endElement();
848
849        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/
850        $objWriter->endElement();
851
852        // a:theme/a:themeElements/a:fmtScheme/
853        $objWriter->endElement();
854
855        // a:theme/a:themeElements/
856        $objWriter->endElement();
857
858        // a:theme/a:themeElements
859        $objWriter->writeElement('a:objectDefaults');
860
861        // a:theme/a:extraClrSchemeLst
862        $objWriter->writeElement('a:extraClrSchemeLst');
863
864        // a:theme/
865        $objWriter->endElement();
866
867        // Return
868        return $objWriter->getData();
869    }
870}